1.1 Dart 运行模式

Dart 语言的一大特色是支持 JIT 和 AOT 两种运行模式。

JIT(just-in-time) 和 AOT(ahead-of-time)两种模式的编译方式和运行方式都有很大不同。


JIT、AOT 特性对比

项目 JIT AOT
性能 由于需要预热,启动速度较慢,但​​随着时间的推移会达到最佳性能 启动后很快就达到峰值性能(使用 JIT 时最大性能可能会更高)
编译时机 运行时编译 预编译
编译时间
目的 提供快速稳定的开发流程,例如Hot Reload 重视用户体验

Dart Kernel 运行模式

除了 JIT 和 AOT 外,Dart 代码还支持以 Dart Kernel 的方式运行。

Dart Kernel 是 Dart 的 intermediate representation 中间语言,是 Dart 内部对抽象语法树的表示结构。具体可参见 2.1 Dart Kernel

通过 dart compile kernel 可以将 Dart 源代码编译为 Kernel Binary(.dill),然后通过 dart run 命令运行。

注:通过 dart run 也可以直接运行 Dart 源代码,在 dart 命令内部,它会先将代码转为 Dart Kernel,再交由 DartVM 运行。


JIT、AOT 都需要 DartVM

JIT 需要 DartVM 比较好理解,就像 Java 与 JVM 一样,Java 字节码需要在 JVM 内才能运行。

比较难以理解的一点,是 AOT 也需要 DartVM。AOT 不是都编译成机器码了吗?怎么还需要虚拟机呢?

造成理解困难的关键在与 DartVM 的命名上。DartVM 是可裁剪的。DartVM 由多个组件组成,包括运行时系统(对象模型、垃圾回收、快照……)、JIT 管道、AOT 管道、解释器等。

在 AOT 模式下,所需要的是一个最精简的 DartVM 裁剪版本,只提供最基础的垃圾回收和核心库等。相当于 JIT 下 DartVM 的功能子集

因此,JIT 下需要全功能的 DartVM,AOT 下需要精简 DartVM。



本文作者:Maeiee

本文链接:1.1 Dart 运行模式

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!